/*
*
* 留言相关接口
*/
const mongoose = require('mongoose');
const express = require('express');
const router = express.Router();
const passport = require('passport');

const Message = require('../../models/Message');
const messageChildren = require('../../models/MessageChildren');
const ArticleList = require('../../models/ArticleList');

//$rote GET api/message
// @desc 返回请求的json数据
// @access public
router.get('/',(req,res)=>{
    res.send (`
    文章评论的留言---对文章类型留言
/**
*  [post] /add
*   param:{
*       articleId:文章id （*）
*       messageuser:留言用户 （*）
*       messageuserId:留言用户id （*）
*       Avatar：留言用户头像 
*       content:留言内容 （*）
*       writerId:作者id （*）
*       writerRead:作者是否阅读 （*）
*   }
*/  
 /***
 *  [get] /find             查询显示留言数据
*   param:{
*       articleId:文章id
*       writerId：作者id
*       messageuserId:留言用户id 
*       writerRead:作者是否阅读 false true
*       page:当前页
*       rows:一页显示数目
*   }
 * @access private
 */
 
 /***
 * [get] articlemessage     -----用于文章内容显示留言区域的
 *  点击文章获取该文章的留言
 *  articleId:文章id
 *  page:当前页
 *  rows:一页显示数目
 */
 
 /**
 * [post] likenum
 * id:留言的id
 * 更新点赞数量
 * @access private
 */
    `)
});


/**
 * [post] likenum
 * id:留言的id
 * 更新点赞数量
 * @access private
 */
router.get('/likenum/:id',passport.authenticate('jwt',{session:false}),(req,res)=>{
    Message.findOne({_id:req.params.id }).then(isMessage=>{
        if(!isMessage){
            return res.status(401).json({msg:'查询失败！'})
        }
        //更新文章中点赞数量
        const like = isMessage.like_num+1;
        Message.findOneAndUpdate(
            { _id:req.params.id },
            { $set: { like_num: like } },
            {new:true}
        ).then(ss=>{
            res.json(ss)
        })
    })
});

/***
 * [get] articlemessage?articleId:articleId&
 *  点击文章获取该文章的留言  必须带分页参数
 *  articleId:文章id
 *  page:当前页
 *  rows:一页显示数目
 */

router.get('/articlemessage',(req,res)=>{
    const messageFiles ={};
    if(req.query.articleId) messageFiles.articleId = req.query.articleId;
    
    let page = parseInt(req.query.page) === 0 ? 1:parseInt(req.query.page);
    let rows = parseInt(req.query.rows) || 10;
    let count=0;
    let skip=0;
    let limit = 0;
    if(page <= 1){
        skip =0;
    } else {
        skip = rows*page - rows
    }
    Message.find(messageFiles).then(message=> {
        if(!message){
            message.length = 0;
        }
        count = message.length;
        //总页数 大于当前页数
        if(Math.ceil(count/rows) >= page){
            if(Math.ceil(count/rows) == page){
                limit = count
            } else {
                limit = parseInt(rows)
            }
        } else {
            return res.json({
                data:[],
                status:1,
                msg:'查询不到数据'
            });
        }
    }).then(()=>{
        Message.aggregate([
            {
                 $lookup: { // 左连接
                    from: "messagechildrens", // 关联到 messagechildrens 表
                    localField: "_id", // Message 表关联的字段
                    foreignField: "messageId", // messagechildrens 表关联的字段
                    as: "children"
                },
            },
            { $match: messageFiles },
            {$skip:skip},
            {$limit:limit}
        ]).sort({date:-1}).then(message=>{
            res.json({
                data:message,
                page:page,
                toatl:count,
                status:2,
            })
        }).catch(err=>res.status(400).json({
            status:0,
            msg:err
        }))
    }).catch(err=>res.status(400).json({
        status:0,
        msg:err
    }))
});

router.post('/add',(req,res)=>{
    const messageFiles = {
        _id:mongoose.Types.ObjectId()
    };
    if(req.body.articleId) messageFiles.articleId = req.body.articleId;
    if(req.body.messageuser) messageFiles.messageuser = req.body.messageuser;
    if(req.body.messageuserId) messageFiles.messageuserId = req.body.messageuserId;
    if(req.body.Avatar) messageFiles.Avatar = req.body.Avatar;
    if(req.body.content) messageFiles.content = req.body.content;
    if(req.body.writerId) messageFiles.writerId = req.body.writerId;
    if(req.body.writerRead) messageFiles.writerRead = req.body.writerRead;
    if(req.body.extra_params){
        let extra_params = req.body.extra_params;

        if(JSON.stringify(extra_params) === '{}'){
            messageFiles.extra_param = {"exports": "extra_params是扩展字段"};

        } else {
            messageFiles.extra_params = req.body.extra_params
        }
    }
    new Message(messageFiles).save().then(message => {
        ArticleList.findOne({_id:messageFiles.articleId }).then(isArticleList=>{
            if(!isArticleList){
                return res.status(401).json({msg:'查询失败！'})
            }
            //更新文章中留言数量
            const like = isArticleList.messnum+1;
            ArticleList.findOneAndUpdate(
                { _id:isArticleList._id },
                { $set: { messnum: like } },
                {new:true}
            ).then(ss=>{
                res.json(message)
            })
        })
    }).catch(err=>res.status(400).json(err))
});

router.get('/find',(req,res)=>{
    let messageObj = {};
    if(req.query.articleId) messageObj['articleId']=req.query.articleId;
    if(req.query.writerId) messageObj['writerId']=req.query.writerId;
    if(req.query.messageuserId) messageObj['messageuserId']=req.query.messageuserId;
    if(req.query.writerRead) messageObj['writerRead']=req.query.writerRead;

    let page = parseInt(req.query.page) === 0 ? 1:parseInt(req.query.page);
    let rows = parseInt(req.query.rows) || 10;
    let count=0;
    let skip=0;
    let limit = 0;
    if(page <= 1){
        skip =0;
    } else {
        skip = rows*page - rows
    }
    Message.find(messageObj).then(message=> {
        if(!message){
            message.length = 0;
        }
        count = message.length;
    }).then(()=>{
        //总页数 大于当前页数
        if(Math.ceil(count/rows) >= page){
            if(Math.ceil(count/rows) == page){
                limit = count
            } else {
                limit = parseInt(rows)
            }
        } else {
            return res.status(401).json({
                data:null,
                msg:'查询不到数据'
            });
        }
        Message.find(messageObj).skip(skip).limit(limit).sort({date:-1}).then(pageMessage=>{
            if(!pageMessage){
                return res.status(404).json({
                    data:[],
                    toatl:0,
                    page:page,
                });
            }
            res.json({
                data:pageMessage,
                toatl:count,
                page:page,
            })
        }).catch(err=>console.log(err))
    })
});


module.exports = router;